# -*- coding: utf-8 -*- 
# @project : 《Atcoder》
# @Author : created by bensonrachel on 2021/7/25
# @File : （step2）G. Student Councils （CF）.py
# https://codeforces.com/edu/course/2/lesson/6/2/practice/contest/283932/problem/G

# 题目是说：当k（每场会议人数）确定，每组学生的人数确定，寻找一个最大的会议场数，其实也就是寻找一个最大参会人数。


# 给定数字k，每个学生会必须由k名学生组成。重要规则:每个委员会应该由来自不同群体的学生组成。也就是说，同一个小组的两个学生不能在同一个委员会里。
# 当然，每个学生不应该参加超过一个委员会(有些学生可能不参加任何委员会)。
# 一个数组(1 . .给定N]，其中a[i]为第i组的学生人数。议会最多可以成立多少个?

"""
def re(mid,rate,k,n):
    sum = k*mid
    for i in range(n):
        sum -= min(rate[i],mid)
    return sum <= 0

"""
#两个re是一样的，都能ac
def re(mid, rate, k, n):# 就是每次都是难在这个判断条件怎么写？？？for each particular group（a[i]) the maximum nums of students can take the slot is min(a[i], x)
    sum = 0
    for i in range(n):
        sum += min(rate[i], mid)
    return sum//k >= mid # 原理是每搜寻到一个mid，看最大的可以参会人数是否大于所有目前需要的参会人数，大于的话，就说明这时候的mid（场数）不是最大值
# 这样就不用考虑怎么算怎么组合才有最大的场数的问题，单是这样，解决问题就不用二分了，但是时间复杂度就高很多。
"""
def re(mid,char,k):
    a = 0
    char.sort(reverse = True)
    for i in range(mid):
        if(char[k-1]==0):
            break
        else:
            for j in range(k):
                char[j] = char[j] - 1
            char.sort(reverse = True) 每次之后都要排序一下
            a += 1
    return a
    
re(sum(char)//k + 1,char,k)
"""

def bi_SC(char, k, n):# 找不大于的最大值的模板
    l = 0
    r = sum(char) // k + 1# 右界的值为最大的场数，就是全部人数没有条件地最多分成多少个组。
    while (l + 1 < r):
        mid = (l + r) // 2
        if (re(mid, char, k, n)):
            l = mid
        else:
            r = mid
    return l


if __name__ == "__main__":
    k = int(input())
    n = int(input())
    char = []
    for _ in range(n):
        x = int(input())
        char.append(x)
    print(bi_SC(char, k, n))